#ifndef __DUNE_SETTING_HH__
#define __DUNE_SETTING_HH__
#include<vector>
#include<string>


namespace constant {
  const int dpi=3.1415926;  
}
namespace setting {
  enum timeadvance_set {euler,rk2,rk3,rk4};
  enum dimensionsplit_set {split, unsplit};
  enum spacediscrete_set {upwind,lf,llf,lw,muscl,tvdlf,fct};
  enum limiter_set {minmod,superbee,mc,vanleer};
  enum boundary_set {allzero,constant,special};
  enum spacegrid_set {yasp,ug};
  enum dgbasis_set {legendre,lagrange};
  extern timeadvance_set timeadvance;
  extern dimensionsplit_set dimensionsplit;
  extern spacediscrete_set spacediscrete;
  extern limiter_set limiter;
  extern boundary_set boundary;
  extern spacegrid_set spacegrid;
  extern dgbasis_set dgbasis;
}

namespace gridsetting {
  const int dimension=3;
  extern double lower[dimension];
  extern double upper[dimension];
  extern double element[dimension];
}

namespace memory {
  extern std::vector<std::vector<double> > variable;
  extern std::vector<std::vector<double> > variable_tmp;  
  extern std::vector<std::vector<std::vector<double> > > update;  
  extern std::vector<std::string> variablename;
  extern std::vector<std::vector<std::vector<double> > > limit_slope;  
  extern std::vector<double> local_vmax;    
  extern int dgflag;
  extern int dgorder;  
  extern int phynumber;
  extern int updatenumber;
  extern int intergnumber;
}

namespace dataanalysis {
  extern std::vector<std::string> auxvariablename;
  extern int auxnumber;
}

namespace timerule {
  extern double current;
  extern double start;
  extern double end;
  extern double dt;
  extern int counter;
  extern double cfl;
  extern int roundnumber;
}


// extern BasisFunction basis;
// class basistest{
//   void testfunction();
// };
#endif  // __DUNE_SETTING_HH__
